<?php

namespace App\Http\Controllers\Admin;

use App\Models\Order;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Excel;
class ExcelController extends Controller
{
    public function export($ids){
        ini_set('memory_limit','500M');
        set_time_limit(0);//设置超时限制为0分钟
        $cellDatas = Order::select('id','channel_info','userinfo','reason','confirm_loan','status','created_at')
            ->orderBy('id','desc')
            ->whereIn('id',explode(',',$ids))
            ->get();
        //表头
        $cellData[0] = ['订单ID','借款人','联系电话','身份证号','申请类别','申请金额(万元)','放款机构','放款产品','签单渠道','放款金额(万元)','签单人','申请时间','分销渠道','分销人','状态'];
        if(count($cellDatas)){
                foreach($cellDatas   as $item ){
                    if($item['status']==0){
                        $status = '申请中';
                    }elseif($item->status==1){
                        $status = '放款';
                    }else{
                        $status = '退单';
                    }
                    $cellData[] = [$item['id'],$item->userinfo['customer'],$item->userinfo['phone'],$item->userinfo['idcard'],$item->userinfo['apply_type'],$item->userinfo['apply_amount'],$item->status==1?$item->confirm_loan['agent_name']:'',$item->status==1?$item->confirm_loan['product_name']:'',$item->channel['company_name'],$item->status==1?$item->confirm_loan['loan_amount']:'',$item->channel['manager'],$item->created_at,$item->channel['parent_company'],$item->channel['parent_manager'],$status];
                }
            Excel::create('订单信息',function($excel) use ($cellData){
                $excel->sheet('score', function($sheet) use ($cellData){
                    $sheet->rows($cellData);
                });
            })->export('xls');
            die;
        }
    }
}
/*@安小超 超哥，你认为什么时候应该使用trait？

http://php.net/manual/zh/language.oop5.traits.php

当你觉得它是一个“特性” 的时候

如何解释特性？

比如模型里 “可删除的”

它就是一个特性

个人浅显的理解就是一个可复用的代码段

对吧

可复用其实比较广了

特性是可复用的子集

如果按照可复用去拆分的话代码会特别零散

比如这么说吧，人类能说话

这是人类的特性

如果另外某一种动物，他也能说话

那么把说话这个特性加上去就好了

所以，如果在 “动物” 这块做trait拆分的话

就有点平常中面向对象里的接口了

那在动物的基类上增加这个方法呢？

但是并不是所有动物都有这个特性啊

动物的基类应该只是：生命，外观，吃

对吧

这些基础的

但是：可以飞翔，可以行走，可以站立，可以说话

这些就是特性了

嗯，和接口其实很像

和接口还是有很多区别的

这玩意儿也是语言级别的事情

其它语言没有这个 trait 的话也通过其它方式实现

有时会在想，interface到底在什么时候用？

接口是对事物的一方面特性的抽象，具体的根据实际情况去实现

有装饰器模式的效果，但是实现不一样

interface 在其它语言里的用法 与在 php 里的用法差别还是很大的

在php里的话，接口用于限制当前对象要使用的方法

但是不限定你的实现

其实就是要求这个类强制实现这些方法就是用interface

比如你依赖一个 Mail 类的话，别人就无法用其它方式来替换

代码耦合就比较高

但是如果你依赖的是一个 MessageInterface

那么别人就可以用任何方式来实现，比如短信，聊天系统还是其它

就不是只能用邮件这样死板了


*/